iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
生成式 AI

學都學了:GenAI 從試錯到實用的實驗筆記系列 第 4

Day4 工具體驗:幫自己做個健康紀錄,順便測 Base44 vs Lovable

  • 分享至 

  • xImage
  •  

今日主題

  • 主目的:

    • 試著測試兩款不同工具在App/Web上實作時間和流程,主要是找到對我本人來說比較好用的組合
    • 比起之前專案:多了資料庫這個環節確認
  • 測試主題:紀錄自己的睡眠時長、心情紀錄 & 依區間數據統計

為什麼想做

  • 市面有超多款睡眠追蹤的 App,但本次目的不是創新產品,只是測試工具的同時,也能幫自己紀錄點資訊
  • 透過測試流程,如果找到合適的組合拳也很不賴,心力就不用擺在熟悉工具,而是優化產品開發點子

思考如何做

  • 前置:先確認 PRD
  • 測試:暴力法,相同 Prompt 丟進去看誰的成品快

flowchart TD
A[點子發想] --> B[需求梳理]
B --> C[定義功能清單(追蹤睡眠、畫面互動、資料庫串接等)]
C --> D[撰寫 PRD(與 ChatGPT 討論細節)]
D --> E[測試不同工具]
E --> F[Base44 ]
E --> G[Lovable + Supabase]
F --> H[實作階段]
H --> I[實作 AI → ✅ 成功]
H --> J[實作 UI 視覺 → ✅ 成功]
G --> K[實作階段]
K --> L[實作 AI → ❌ 資料庫互動邏輯不 OK]
K --> M[實作 UI 視覺 → ✅ OK]

https://ithelp.ithome.com.tw/upload/images/20250918/20178815fHwlVvo6eo.png

Step1:根據需求設定PRD
*初始對話 Prompt:

0.品牌/視覺基調
整體走向:柔焦水彩漸層(Soft-Blur Watercolor)+圓角卡片

色彩:淡藍、薰衣草紫、蜜桃橘、晨光黃的低飽和漸層;夜間轉深藍/墨紫。

質感:背景大面積模糊暈染(類似水彩或鏡頭散景 bokeh),前景卡片使用高圓角(16–24px)與輕玻璃擬態(微透明+背景模糊)。

排版:大字標題(字重 600–700),內文 15–16px,字距微寬;重要資訊(時間、打卡)採高對比白字或墨色。

動態:滑順淡入淡出(200–400ms),背景有低頻率流動模糊(避免干擾)。

圖像:太陽/雲層/星點為抽象塊面或輕筆觸,非寫實插畫;避免過度裝飾。

卡片:投影柔和(0 10px 30px rgba(0,0,0,0.08)),不使用硬邊框,可用 1px 內嵌光暈(內線性陰影)。

背景時間主題(延用前一版區段,改為水彩漸層語彙)

06:00–08:00 朦朧天光:#BEE3F8 → #FDE1CF(淡藍→粉橘),加 8–12% 噪點與 16px 高斯模糊流動。

08:00–12:00 豔陽白天:#8FD3FE → #C3B6FF(亮藍→淡紫),右上角有一顆半透明「日暈」。

12:00–17:00 午後:#FFE29A → #A1C4FD(暖黃→天藍),光感降低、對比放柔。

17:00–19:00 傍晚:#FF9A9E → #8EC5FC → #B993D6(橘紅→藍→紫)三段式漸層,水平流動。

19:00–06:00 夜幕:#0B1B3A → #241E4E(深藍→墨紫),散佈 1–2px 微光點(隨機 20–40 顆,閃爍 3–5s 週期)。

前端實作:以 CSS 變數驅動主題(--bg-start / --bg-end / --glow),每分鐘檢查時段,切換 data-theme class,過渡 1s。

1. 分頁

Home(打卡):中央大時鐘(指針+數字)、兩顆打卡按鈕、今日心情分數 (有1~10分10個泡泡,如果果當日點選了就可重畫面消失)

Logs(歷史):按日清單,可編輯/補登。

Insights(趨勢):7/30/90 天折線圖、散點圖:睡眠 vs 心情散點、指標:平均睡眠時數、入睡中位數、起床中位數、連續打卡天數 (streak)

2. 關鍵互動
我要睡了 → 建立未結束 session(sleep_start)。

我起床了 → 補 sleep_end 並計算 duration_minutes。

心情輸入 → 每日單筆 mood_score(重填覆蓋)。

背景切換 → 依小時自動變換主題(見上節)

3. 前端技術
Next.js 14(App Router)、Tailwind + shadcn/ui、Framer Motion(淡入/背景流動)、Recharts(圖表)。

PWA:可安裝、離線暫存打卡(IndexedDB),線上再同步。

狀態:Server Actions + React Query(或只用 SSG/ISR + client fetch)。

4. 後端
Auth:Email OTP / Magic Link;匿名先用 Local Storage 暫存,登入後「合併資料」。

DB:Postgres;一律存 UTC;依使用者時區呈現。

安全:RLS 全開、每表以 user_id = auth.uid() 限定。

5. API(可做成 Server Actions)
POST /sleep/start:建立未結束 session(若存在則 409)。

POST /sleep/end:補上 sleep_end、計算 duration_minutes。

GET /sleep?from&to:查詢期間 sessions。

PUT /sleep/:id:更正/補登(檢查重疊)。

PUT /mood/:day:寫入/更新每日心情。

GET /insights?range=30d:回平均、P50、Streak、相關係數等。

6. 前端樣式(快速落地提示)
主題 class:data-theme="dawn|morning|afternoon|evening|night" 切換 CSS 變數。

變數:

7. API 規格

POST /sleep/start → 建立就寢 session。

POST /sleep/end → 結束 session 並計算時數。

PUT /sleep/:id → 編輯或補登。

PUT /mood/:day → 更新當日心情。

GET /insights?range=30d → 回傳統計與趨勢資料。

Supabase Schema,如果有更好建議或其他作法也可以

-- 擴充 create extension if not exists "uuid-ossp"; create extension if not exists "pgcrypto";

-- 使用者(單人用也保留,方便 RLS 與未來擴充) create table if not exists public.users ( id uuid primary key default auth.uid(), email text unique, created_at timestamptz not null default now() );

-- 睡眠區段:一次就寢→起床 create table if not exists public.sleep_sessions ( id uuid primary key default uuid_generate_v4(), user_id uuid not null references public.users(id) on delete cascade, sleep_start timestamptz not null, -- UTC sleep_end timestamptz, -- UTC duration_minutes int, -- 結束時計算 source text not null default 'manual', -- manual | edited | import notes text, created_at timestamptz not null default now(), updated_at timestamptz not null default now() );

create index on public.sleep_sessions (user_id, sleep_start); create index on public.sleep_sessions (user_id, sleep_end);

-- 每日心情:一天一筆(固定 1..5) create table if not exists public.day_moods ( id uuid primary key default uuid_generate_v4(), user_id uuid not null references public.users(id) on delete cascade, day date not null, -- 以 Asia/Taipei 切日再存(UTC date) mood_score int not null check (mood_score between 1 and 5), notes text, created_at timestamptz not null default now(), unique (user_id, day) );

-- updated_at 觸發器 create or replace function set_updated_at() returns trigger language plpgsql as $$ begin new.updated_at = now(); return new; end $$;

drop trigger if exists trg_sleep_sessions_updated_at on public.sleep_sessions; create trigger trg_sleep_sessions_updated_at before update on public.sleep_sessions for each row execute function set_updated_at();

-- RLS alter table public.users enable row level security; alter table public.sleep_sessions enable row level security; alter table public.day_moods enable row level security;

-- 僅允許本人讀寫 create policy "users_self" on public.users for select using (id = auth.uid()) with check (id = auth.uid());

create policy "sleep_sessions_self" on public.sleep_sessions for all using (user_id = auth.uid()) with check (user_id = auth.uid());

create policy "day_moods_self" on public.day_moods for all using (user_id = auth.uid()) with check (user_id = auth.uid());

Step2:暴力測試法,相同 Prompt 丟進去,就看誰的成果符合預期

成果校驗

小結:

  • 這次 Base44 勝出,視覺風格到資料庫 Schema 設定都一次成功,頗適合前期作假性測試頁面,或只是個人需求
  • Lovable 視覺風格很OK,但在互動邏輯與資料設定失敗了,多數評價 Lovable跟Supabase 系統串的很好,設定也清楚,但這次沒測試成功,下次換個主題再攻略看看
工具 完成時間 功能達成度 易用性 & 挑戰
Base44 30 分鐘 幾乎完成所有基本功能,部署上線成功 上手快,邏輯設定與資料互動順;但付費牆對 GitHub 推送限制,有些功能受限。
Lovable 1 小時 還未完全完成所有功能 視覺介面直觀;但程式邏輯/資料互動卡頓,需要許多微調與除錯。

畫面呈現
首頁
https://ithelp.ithome.com.tw/upload/images/20250918/20178815VGaLgFazJT.jpg
紀錄

  • 一個我沒寫到的規格但我覺得加的不錯:起床前的狀態標示,是顯示睡眠進行中
    https://ithelp.ithome.com.tw/upload/images/20250918/201788150EsZrrsbCT.jpg

趨勢

https://ithelp.ithome.com.tw/upload/images/20250918/20178815R7pImwIVAA.jpg

今日總結

  • 我做了什麼?

    • 點子確認、確定視覺風格、文字潤飾、不同工具串接授權
  • AI 幫我什麼?

    • PRD 整理、網站框架、視覺文字定義、寫程式、資料庫設定、部署
    • 資料庫設定比以前容易很多,自己用沒差,但公開使用還是得注意隱私性設定跟連線問題
  • 遇到的挑戰:

    • 很意外是兩個工具都無法正確顯示時鐘的分針與時針,直覺怎麼會有這問題? 結果查了一下意外獲得冷知識 (好讚)
      • 原因:座標系統定義不同:數學座標系統 vs. 鐘面習慣
      • 在數學/程式裡:角度 0° 是「指向右邊」(x 軸正方向),逆時針增加
      • 鐘面:12 點鐘方向才是我們直覺「起點」,而不是 3 點鐘方向
      • 造成:用數學方式畫時針、分針,就會整個偏右 90°
      • 解法:就是整體往前轉 90°(或 -90°),讓基準對齊鐘面

上一篇
Day 3 依舊是繼續刻一個魚缸:分析優化方向 & 重構2.0
系列文
學都學了:GenAI 從試錯到實用的實驗筆記4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言